java非静态createnewfrom方法?
我有时编写的类可以转换成其他东西,也可以从其他东西转换而来,我习惯于将其作为非静态的convert-to方法和静态convert-from方法来编写,例如:
class A {
B toB() {...}
static A fromB(B b) {...}
}
或者
class B {
void save(File f) {...}
static B load(File f) {...}
}
我以前认为这是一种很好且简单的方法,但最近从方法转换的静态特性一直困扰着我,例如,如果我想为可以转换为-和从-B
的类型定义一个接口:
interface ConvertableToAndFromB {
B toB();
// ?
}
那么,除了迁移到Smalltalk之外,有没有一种优雅的方法可以在不转换为静态的情况下实现这一点
编辑
为了澄清,我意识到我可以在界面中添加一个非静态方法,例如:
interface ConvertableToAndFromB {
B toB();
void fromB(B b);
}
或者,如果我想允许不可变类型(感谢条带化):
interface ConvertableToAndFromB<T implements ConvertibleToAndFromB<T>> {
B toB();
T fromB(B b);
}
但这需要我在调用之前创建一个新的A
,比如:
A a = new A();
a.fromB(b);
或者(对于不可变):
A a = new A();
a = a.fromB(b);
这就是我试图避免的(但没有其他解决方案)。我只是希望有更好的方式
# 1 楼答案
你应该能够使你的接口递归通用。我相信语法是这样的:
让事情变得更加类型化有明显的优势。然而,这确实意味着在调用
fromB
时,您必须对所需的实际类型有所了解。这种方法有优点也有缺点作为补充说明,让
A
负责生成类型为A
或B
的对象违反了单一责任原则,我通常更希望有一个单独的转换器类或接口来执行这些操作